/**
 * 项目名称（软件名称）：忠旺机械物资管理系统(mms)
 * 研发设计单位：忠旺机械设备制造有限公司机械设计院智能控制设计科设计与研发。
 * 版权所有：忠旺机械设备制造有限公司
 * 注：本项目的一切技术专利，使用规范归解释权由忠旺机械设备制造有限公司所有。
 * 软件版本：Ver 1.0.0
 * 文件路径：com.zhongwang.mms.module.basic.service
 * 创建时间：2020年04月09日 20时36分
 **/
package com.zhongwang.mms.module.basic.service;

import com.zhongwang.mms.config.timingtask.StatisticalTimingTask;
import com.zhongwang.mms.gen.entity.TCost;
import com.zhongwang.mms.module.basic.dao.BoardDao;
import com.zhongwang.mms.module.purchase.model.VWProject;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import static com.zhongwang.mms.config.timingtask.StatisticalTimingTask.getVWProjectByCode;

/**
 * @ClassName： BoardService
 * @Description： 看板系统业务逻辑层
 * @Author： 徐一贺
 * @Date： 2020/4/9 20:36
 * @Version： V1.0
 **/
@Service
@Log4j2
public class BoardService {
    @Autowired
    private BoardDao boardDao;

    /**
     * @FunctionName: isExistByProjectCode
     * @Description: 查看项目号在看板系统中是否存在
     * @Author: 徐一贺
     * @CreateDate: 2020/4/9 20:16
     * @Phone: 18241927380
     * @Param: projectCode 被查找的项目号
     * @Return: [boolean] 不存在返回真
     * @Version: 1.0.0
     */
    public int isExistByProjectCode(String projectCode) {
        if (null!=getVWProjectByCode(projectCode)){
            return 1;
        }
        return 0;
    }

    /**
     * @FunctionName: getBoardProjectCode
     * @Description: 查看项目号在看板系统中是否存在
     * @Author: 徐一贺
     * @CreateDate: 2020/4/9 20:16
     * @Phone: 18241927380
     * @Param: projectCode 被查找的项目号
     * @Return: [boolean] 不存在返回真
     * @Version: 1.0.0
     */
    public boolean isNotExist(String projectCode) {
        return isExistByProjectCode(projectCode) == 0;
    }




    /**
     * @FunctionName: projectCodeHandle
     * @Description: 项目号处理截取后六位, 并转换到大写。
     * @Author: 徐一贺
     * @CreateDate: 2020/4/9 20:11
     * @Phone: 18241927380
     * @Param: [projectCode] 被处理的项目号
     * @Return: [handleCode] 处理后的项目号
     * @Version: 1.0.0
     */
    public String projectCodeHandle(String projectCode) {
                String handleCode = "";
        try {
            if (projectCode.trim().toCharArray().length > 1) {
                String beginStr = projectCode.trim().toCharArray()[0]+""+projectCode.trim().toCharArray()[1];
                char lastChar = projectCode.trim().toCharArray()[projectCode.trim().length()-1];
                //如果是ZW字母开头的 或 整个项目号是纯数字的 或 最后一个是字母的 前面不补20
                if(StatisticalTimingTask.getCBZXProject(projectCode) == null)
                {
                    //如果是字母开头的
                    if (beginStr.toUpperCase().equals("ZW")  || isNumeric(projectCode.trim()) || lastChar >='a' && lastChar <= 'z' || lastChar >='A' && lastChar <= 'Z') {
                        handleCode = projectCode.trim();
                    }
                    //其他补20
                    else {
                        if (projectCode.trim().length() == 8) {
                            handleCode = projectCode.trim().substring(2);
                        } else {
                            handleCode = projectCode.trim();
                        }
                        String year = new SimpleDateFormat("YYYY").format(new Date());
                        if (Integer.parseInt(year.substring(0, 2)) > 20) {
                            handleCode = year.substring(0, 2) + handleCode;
                        } else {
                            handleCode = "20" + handleCode;
                        }
                    }
                }else{
                    handleCode = projectCode.trim();
                }
            }else
            {
                handleCode = projectCode.trim();
            }
        }catch (Exception e){
            e.printStackTrace();
            return projectCode.toUpperCase();
        }
        return handleCode.toUpperCase();
    }

    /**
     * @FunctionName: isNumeric
     * @Description: 用Ascii码验证字符串是否为全数字
     * @DesignIdea: 用Ascii码验证字符串是否为全数字
     * @Author: 徐一贺
     * @CreateDate: 2020/6/1 11:25
     * @Phone: 18241927380
     * @Param: [str] 验证字符串
     * @Version: v 1.0.0
     */
    public boolean isNumeric(String str) {
        for (int i = str.length(); --i >= 0; ) {
            int chr = str.charAt(i);
            if (chr < 48 || chr > 57)
                return false;
        }
        return true;
    }

    /**
     * 根据项目号获取项目信息
     * @param proCode 项目编号
     * @return
     */
    public VWProject getVWProjectByProjectCode(String proCode) {
        return getVWProjectByCode(proCode);
    }

    /**
     * 查询所有项目编号
     * @return
     */
    public List<VWProject> selectProjectList() {
        return boardDao.selectProjectList();
    }

    /**
     * 获取所有成本中心项目号
     * @return
     */
    public List<TCost> selectCost() {
        return boardDao.selectCost();
    }
}